package org.example.countDownLatch;

import java.util.Random;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

public class SemaphoreTest {
    public static void main(String[] args) {
        // 模拟100个车位
        Semaphore semaphore = new Semaphore(100);

        // 入口
        new Thread(() -> {
            while (true) {
                try {
                    if (semaphore.availablePermits() > 0) {
                        semaphore.acquire(1);
                        System.out.println("入口成功驶入车辆，现有车位：" + semaphore.availablePermits());
                        TimeUnit.SECONDS.sleep(1);//模拟车辆在停车场停留的时间
                    } else {
                        System.out.println("车位不足，请耐心等待");
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        }).start();

        // 出口
        new Thread(() -> {
            while (true) {
                try {
                    if (semaphore.availablePermits() < 100) {
                        semaphore.release(1);
                        System.out.println("出口成功驶出停车场，现有车位：" + semaphore.availablePermits());
                        TimeUnit.SECONDS.sleep(1);//模拟车辆驶出的间隔时间
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        }).start();
    }
}
